package bluejTp1Project;

import static org.junit.Assert.*;
import junit.framework.TestCase;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * The test class SalleDeSportTest.
 *
 * @author  (your name)
 * @version (a version number or a date)
 */
public class SalleDeSportTest extends TestCase
{
	private SalleDeSport salleDeS1;
	private Concierge concierg1;

	/**
	 * Default constructor for test class SalleDeSportTest
	 */
	public SalleDeSportTest()
	{

	}

	/***************************************
	 * Sets up the test fixture.
	 * Called before every test case method.
	 ***************************************/
	@Before
	public void setUp()
	{
		salleDeS1 = new SalleDeSport();
		salleDeS1.setNbrAdherent(40);
		salleDeS1.setTarifMensuel(30);
		concierg1 = new Concierge();
		concierg1.setSalleDeSport(salleDeS1);
		concierg1.setDepensesSalleDeSport(8000);
	}

	/**
	 * Tears down the test fixture.
	 *
	 * Called after every test case method.
	 */
	@After
	public void tearDown()
	{
	}

	@Test
	public void testNbrAdherent()
	{
		SalleDeSport salleDeS1 = new SalleDeSport();
		salleDeS1.setNbrAdherent(20);
		//assertEquals("Toto", expected, actual, delta);
		assertEquals(20, salleDeS1.getNbrAdherent());

	}

	@Test
	public void testTarifmensuel()
	{
		SalleDeSport salleDeS1 = new SalleDeSport();
		salleDeS1.setTarifMensuel(34);
		assertEquals(34, salleDeS1.getTarifMensuel());
	}

	@Test
	public void testBudgetAnnuel()
	{
		SalleDeSport salleDeS1 = new SalleDeSport();
		salleDeS1.setNbrAdherent(20);
		salleDeS1.setTarifMensuel(34);
		assertEquals(8160, salleDeS1.gainAnnuel());
	}

	@Test
	public void testRecettesAnnuelles()
	{
		assertEquals(6400, concierg1.recettesAnnuellesSalleDeSport());
	}
	/******************************************************
	 * -------------- USERS STORIES TEST -----------------
	 ******************************************************/
	//TEST 01 -- Nombre adherents devrait etre égal au nombre de personnes inscrites à la salle
	@Test
	public void testTS01(){
		//Creation d'une Salle de sport
		SalleDeSport salle = new SalleDeSport();
		//Creation d'adhérents
		Personne toto = new Personne();
		Personne tutu = new Personne();
		double expected = 2;
		Personne[] tabPerson = {toto, tutu};
		salle.setPersonnes(tabPerson);
		assertEquals("Nombre d'Adherents Incoherent", expected, salle.getNbrAdherent(), 0);
	}

	//TEST 02 -- Verifiez que les personnes inscrites dans la salle de sport savent
	//           qu'elles y sont inscrites.
	@Test
	public void testTS02(){
		//Creation de 2 Salles de sport
		SalleDeSport salle1 = new SalleDeSport();
		salle1.setTarifMensuel(40);
		SalleDeSport salle2 = new SalleDeSport();
		salle2.setTarifMensuel(25);
		//Creation d'adhérents
		Personne roger = new Personne();
		Personne tutu = new Personne();
		Personne tata = new Personne();
		Personne[] tabPerson = {roger, tutu};
		Personne[] tabPersonbis = {tata};
		salle1.setPersonnes(tabPerson);
		salle2.setPersonnes(tabPersonbis);
		//Test Coherence de la Salle affectée à Toto et Tutu
		assertEquals("Salle de Toto Incoherente", salle1, roger.getSalleDeSport());
		assertEquals("Salle de Tutu Incoherente", salle1, tutu.getSalleDeSport());
		// Test Coherence de la Salle affectée Tata
		assertEquals("Salle de Tata Incoherente", salle2, tata.getSalleDeSport());
	}

	//TEST 03 -- Le nombre d'adherents et le tarif mensuel doivent être des entiers positifs ou nuls
	public void testTS03(){
		testTS03A();
		testTS03B();
	}
	public void testTS03A(){
		//Creation d'une Salle de Sport
		SalleDeSport salle1 = new SalleDeSport();
		int nbAdherent = -30;
		int tarifMensuel = -40;
		int expectedNbAdh = salle1.getNbrAdherent();
		salle1.setNbrAdherent(nbAdherent);
		salle1.setTarifMensuel(tarifMensuel);
		assertEquals("Nombre d'Adhérents Incohérent", expectedNbAdh, salle1.getNbrAdherent());
	}
	public void testTS03B(){
		//Creation d'une Salle de Sport
		SalleDeSport salle1 = new SalleDeSport();
		int nbAdherent = -30;
		int tarifMensuel = -40;
		int expectedTarif = salle1.getTarifMensuel();
		salle1.setNbrAdherent(nbAdherent);
		salle1.setTarifMensuel(tarifMensuel);
		assertEquals("Tarif Mensuel Incohérent", expectedTarif, salle1.getTarifMensuel());
	}

	//TEST 04 -- Verifier que le nom de la Personne n'excéde pas 15 caractères
	public void testTS04(){
		Personne toto = new Personne();
		String expectedName = "azertyuiopqsdf";
		toto.setName("azertyuiopqsdfghjklm");
		assertEquals("Nom de l'Adherent Incoherent", expectedName, toto.getName());
	}

	//TEST 05 -- Verifier qu'une Personne apparait bien au groupe de personne de sa salle de sport
	public void testTS05(){
		SalleDeSport salle1 = new SalleDeSport();
		Personne Venancia = new Personne();
		Venancia.setName("Venancia");
		Venancia.setSalleDeSport(salle1);
		assertEquals("La personne n'apparaît pas dans la liste de personnes de sa salle ", salle1.getPersonnes()[0], Venancia);
	}

	//TEST 06 -- Mise à Jour d'une Personne
	public void testTS06(){
		testTS06A();
		testTS06B();
		testTS06C();
		testTS06D();
	}
	// Test T06A -- Vérifier que la personne apparaît dans sa nouvelle salle de sport
	public void testTS06A(){
		SalleDeSport salle1 = new SalleDeSport();
		SalleDeSport salle2 = new SalleDeSport();
		Personne Venancia = new Personne();
		Venancia.setName("Venancia");
		Venancia.setSalleDeSport(salle1);
		Personne[] perso = salle1.getPersonnes();
		Venancia.setSalleDeSport(salle2);
		@SuppressWarnings("unused")
		Personne[] pers = salle1.getPersonnes();
		assertEquals("La personne n'apparaît pas dans la liste de personnes de sa salle 2 ", salle2.getPersonnes()[0], Venancia);
	}
	// Test T06B -- Vérifier que la personne n'apparaît plus dans son ancienne salle de sport
	public void testTS06B(){
		SalleDeSport salle1 = new SalleDeSport();
		SalleDeSport salle2 = new SalleDeSport();
		Personne Venancia = new Personne();
		Venancia.setName("Venancia");
		Venancia.setSalleDeSport(salle1);
		Personne[] perso = salle1.getPersonnes();
		Venancia.setSalleDeSport(salle2);
		@SuppressWarnings("unused")
		Personne[] pers = salle1.getPersonnes();
		assertEquals("La personne apparaît encore dans son ancienne salle de sport ", 0,salle1.getPersonnes().length);
	}
	
	// Test T06C -- Vérifier que le nombre d'adhérents de l'ancienne salle a été décrémenté de 1
	public void testTS06C(){
		SalleDeSport salle1 = new SalleDeSport();
		SalleDeSport salle2 = new SalleDeSport();
		Personne Venancia = new Personne();
		Venancia.setName("Venancia");
		Venancia.setSalleDeSport(salle1);
		Venancia.setSalleDeSport(salle2);
		assertEquals("L'ancienne salle n'a pas été décrémentée ",0,salle1.getNbrAdherent(),0);
	}
	
	// Test T06D -- Vérifier que le nombre d'adhérents de la nouvelle salle a été incrémenté de 1
		public void testTS06D(){
			SalleDeSport salle1 = new SalleDeSport();
			SalleDeSport salle2 = new SalleDeSport();
			Personne Venancia = new Personne();
			Venancia.setName("Venancia");
			Venancia.setSalleDeSport(salle1);
			Venancia.setSalleDeSport(salle2);
			assertEquals("La nouvelle salle n'a pas été incrémentée ",1,salle2.getNbrAdherent(),0);
		}
	
}



